package dondeestamitrasnporte.protocolo;

import java.util.ArrayList;

import com.google.android.gms.maps.model.LatLng;





public class ManejadorProtocolo 
{


	//LA IDE DE ESTE METODO ES QUE USTED LE DA LOS PARADEROS QUE TENGA REGISTRADOS (UTILICE LA CLASE PARADERO)
	//Y LAS COORDENADAS QUE TENGA PARA PODER DIBUJAR (LATITD Y LONGITUD EN DOUBLES) PARA GENERAR EL STRING QUE SE ENCVIA
	//EL METODO INVERSO LE DEVUELVE UN ARRAY DE OBJETOS CON LOS PARADEROS Y EL ARRAY DE LatLng PARA PINTAR.

	//SI NO TIENE PARADEROS O DIBUJO PARA ENVIAR, ENVIE ARRAYLIST VACIOS PERO NO EN NULL!!!!
	public static String crearString(ArrayList<Paradero> paraderos, ArrayList<LatLng> dibujo)
	{

		String respuesta ="";

		for(int i = 0; i< paraderos.size();i++)
		{

			if(i< paraderos.size()- 1 )
			{
				Paradero p = paraderos.get(i);
				respuesta+= p.getNombre()+"#";
				respuesta+= p.getCoordenadas().latitude + "," + p.getCoordenadas().longitude + "#";
				for(int j = 0; j <p.getEstadisticas().size();j++)
				{
					if(j< p.getEstadisticas().size()- 1 )
					{

						respuesta+= p.getEstadisticas().get(j).darString() +";";
					}
					else
					{

						respuesta+= p.getEstadisticas().get(j).darString();
					}

				}


				respuesta+= "%";
			}
			else
			{

				Paradero p = paraderos.get(i);
				respuesta+= p.getNombre()+"#";
				respuesta+= p.getCoordenadas().latitude + "," + p.getCoordenadas().longitude + "#";
				for(int j = 0; j <p.getEstadisticas().size();j++)
				{
					if(j< p.getEstadisticas().size()- 1 )
					{

						respuesta+= p.getEstadisticas().get(j).darString() +";";
					}
					else
					{

						respuesta+= p.getEstadisticas().get(j).darString();
					}

				}


			}

		}


		if(paraderos.size()==0)
		{
			respuesta+="NA";
		}
		respuesta+="&";

		for(int i = 0; i<dibujo.size();i++)
		{
			if(i< dibujo.size()- 1 )
			{
				respuesta+=dibujo.get(i).latitude+","+dibujo.get(i).longitude+";";
			}
			else
			{

				respuesta+=dibujo.get(i).latitude+","+dibujo.get(i).longitude+";";
			}


		}

		if(dibujo.size()==0)
		{
			respuesta+="NA";
		}

		return respuesta;

	}


	public static Object[] desencriptarString(String mensaje)
	{
		ArrayList<Paradero> paraderos = new ArrayList<Paradero>();
		ArrayList<LatLng> dibujo = new ArrayList<LatLng>();
		String[] temp1 = mensaje.split("&");

		String temporal = temp1[0];
		if(!temporal.equals("NA"))
		{
			String[] losParas = temporal.split("%");



			for(int i = 0; i < losParas.length;i++)
			{ 
				ArrayList<Estadistica> estadisticas = new ArrayList<Estadistica>();
				String[] partesParadero = losParas[i].split("#");


				LatLng coordenadas = new LatLng(Double.parseDouble(partesParadero[1].split(",")[0]), Double.parseDouble(partesParadero[1].split(",")[1]));
				if(partesParadero.length>2)
				{
					String[] estadis = partesParadero[2].split(";");
					for(int j = 0; j < estadis.length;j++)
					{

						estadisticas.add(new Estadistica(estadis[j]));
					}
				}

				paraderos.add(new Paradero(coordenadas, estadisticas, partesParadero[0]));

			}
		}

		if(!temp1[1].equals("NA"))
		{
			String[] dib = temp1[1].split(";");

			for(int i = 0; i< dib.length;i++)
			{
				dibujo.add(new LatLng(Double.parseDouble(dib[i].split(",")[0]), Double.parseDouble(dib[i].split(",")[1])));

			}


		}
		
		Object[] respuesta = new Object[2];
		respuesta[0] = paraderos;
		respuesta[1] = dibujo;
		return respuesta;

	}

	public static void main(String[] args)
	{

		ArrayList<Paradero> paraderos = new ArrayList<Paradero>();
		ArrayList<LatLng> dibujo = new ArrayList<LatLng>();

		for(int i =0; i <100; i++)
		{
			ArrayList<Estadistica> esta = new ArrayList<Estadistica>();
			for(int j = i ; j<80;j++)
			{

				esta.add(new Estadistica(j,j,j,j,j));

			}

			paraderos.add(new Paradero(new LatLng(i, i), esta, "Paradero " + i));
			dibujo.add(new LatLng(i, -i));



		}

		String k = crearString(paraderos, dibujo);
		System.out.println(k);
		Object[] ob = desencriptarString(k);
		ArrayList<Paradero> paraderos2 =  (ArrayList<Paradero>)ob[0];
		ArrayList<LatLng> dibujo2 = (ArrayList<LatLng>)ob[1];

		System.out.println(sonIguales(paraderos, dibujo,paraderos2,dibujo2 ));






	}

	public static boolean sonIguales(ArrayList<Paradero> paraderos1, ArrayList<LatLng> dibujo1, ArrayList<Paradero> paraderos2, ArrayList<LatLng> dibujo2)
	{

		boolean respuesta = true;
		if(paraderos1.size()!= paraderos2.size())
		{

			respuesta = false;

		}
		for(int i = 0; i < paraderos1.size() && respuesta;i++)
		{
			if(!paraderos1.get(i).iguales(paraderos2.get(i)))
			{

				respuesta = false;

			}
		}

		if(dibujo1.size()!= dibujo2.size())
		{
			respuesta = false;
		}

		for(int i = 0; i < dibujo1.size();i++)
		{
			if(dibujo1.get(i).latitude!= dibujo2.get(i).latitude || dibujo1.get(i).longitude!= dibujo2.get(i).longitude )
			{

				respuesta = false;
			}
		}

		return respuesta;
	}


}
